/*
 * All rights Reserved, Designed By DataDriver
 * Copyright:    DataDriver.Inc
 * Company:      Zhuo Wo Infomation Technology (ShangHai) CO.LTD
 */
package com.sun.dubboconsumer.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.annotation.Service;
import com.sun.model.UserInfo;
import com.sun.service.ConsumerService;
import com.sun.service.UserService;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Service //采用的是dubbo的服务暴露
public class ConsumerServiceImpl implements ConsumerService {

    //@Reference(version = "2.0.0",url = "127.0.0.1:2181",loadbalance = )//调用服务,可以指定版本
    @Reference(version = "2.0.0",loadbalance = "roundrobin")//调用服务,可以指定版本
     /**Loc
       * url = "127.0.0.1:2181";dubbo直连；
      *  再生产中Zookepper发生宕机时，我们服务端的消费还是可以进行的，因为Zookeeper只是把我们服务的注册地址进行保存
      *  当Zookeeper发生宕机时，我们之前调用的会产生本地的缓存，服务还可以继续使用。此外我们也可以使用dubbo直连的方式制定服务调用的Zookeeper地址
      *   也是可以玩成服务的调用。
      *
      *  负载均衡策略: loadbalance
      *   有四种负责均衡策略：
      *    1、Random LoadBalance :随机，按权重设置随机概率
      *    2、RoundRobin LoadBalance  轮询，按公约后的权重设置轮询比率。
      *    3、LeastActive LoadBalance  最少活跃调用数，相同活跃数的随机，活跃数指调用前后计数差。使慢的提供者收到更少请求，因为越慢的提供者的调用前后计数差会越大
      *    4、ConsistentHash LoadBalance 一致性 Hash，相同参数的请求总是发到同一提供者。当某一台提供者挂时，原本发往该提供者的请求，基于虚拟节点，平摊到其它提供者，不会引起剧烈变动。
       */
    UserService userService;

    @Override
    public List<UserInfo> findAllUserInfo() {
        return userService.selectAllUser();
    }
}
